// Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree.

// package collider 定义了基于 WebSocket 的信令服务。
package collider

import (
	"encoding/json"
	"io"
	"log"
)

// wsClientMsg 是从客户端发来的 WebSocket 消息结构。
type wsClientMsg struct {
	Cmd      string `json:"cmd"`
	RoomID   string `json:"roomid"`
	ClientID string `json:"clientid"`
	Msg      string `json:"msg"`
}

// wsServerMsg 是代表另一个客户端发送给某个客户端的消息。
type wsServerMsg struct {
	Msg   string `json:"msg"`
	Error string `json:"error"`
}

// sendServerMsg 用于从 |msg| 构建一个 wsServerMsg，并将其发送到连接中。
func sendServerMsg(w io.Writer, msg string) error {
	log.Printf(">>> 发送服务器消息: %s", msg)
	m := wsServerMsg{
		Msg: msg,
	}
	return send(w, m)
}

// sendServerErr 用于从 |errMsg| 构建一个 wsServerMsg，并将其发送到连接中。
func sendServerErr(w io.Writer, errMsg string) error {
	log.Printf(">>> 发送服务器错误: %s", errMsg)
	m := wsServerMsg{
		Error: errMsg,
	}
	return send(w, m)
}

// send 将一个通用对象作为 JSON 写入到 writer 中。
func send(w io.Writer, data interface{}) error {
	enc := json.NewEncoder(w)
	if err := enc.Encode(data); err != nil {
		log.Printf("!!! send 错误: 编码 JSON 失败: %v", err)
		return err
	}
	return nil
}
